package com.gobang.common.exception;

import lombok.Getter;

/**
 * 积分管理模块专用异常类
 * 继承BaseException，提供积分相关的异常处理
 * 
 * @author System
 * @since 1.0.0
 */
@Getter
public class ScoreException extends BaseException {

    public ScoreException(ErrorCode errorCode) {
        super(errorCode);
    }

    public ScoreException(ErrorCode errorCode, String customMessage) {
        super(errorCode, customMessage);
    }

    public ScoreException(String code, String message) {
        super(code, message);
    }

    // ============ 常用异常静态方法 ============

    /**
     * 积分计算错误
     */
    public static ScoreException calculateError() {
        return new ScoreException(ErrorCode.SCORE_CALCULATE_ERROR);
    }

    /**
     * 积分更新失败
     */
    public static ScoreException updateFailed() {
        return new ScoreException(ErrorCode.SCORE_UPDATE_FAILED);
    }

    /**
     * 积分记录创建失败
     */
    public static ScoreException recordCreateFailed() {
        return new ScoreException(ErrorCode.SCORE_RECORD_CREATE_FAILED);
    }

    /**
     * 积分记录不存在
     */
    public static ScoreException recordNotFound() {
        return new ScoreException(ErrorCode.SCORE_RECORD_NOT_FOUND);
    }

    /**
     * 积分不足
     */
    public static ScoreException insufficient() {
        return new ScoreException(ErrorCode.SCORE_INSUFFICIENT);
    }

    /**
     * 无效的积分变化
     */
    public static ScoreException invalidChange() {
        return new ScoreException(ErrorCode.SCORE_CHANGE_INVALID);
    }

    /**
     * 积分历史查询失败
     */
    public static ScoreException queryFailed() {
        return new ScoreException(ErrorCode.SCORE_HISTORY_QUERY_FAILED);
    }

    /**
     * 积分回滚失败
     */
    public static ScoreException rollbackFailed() {
        return new ScoreException(ErrorCode.SCORE_ROLLBACK_FAILED);
    }

    /**
     * 积分并发更新冲突
     */
    public static ScoreException concurrencyError() {
        return new ScoreException(ErrorCode.SCORE_CONCURRENCY_ERROR);
    }

    /**
     * 积分数据校验失败
     */
    public static ScoreException validateError() {
        return new ScoreException(ErrorCode.SCORE_VALIDATE_ERROR);
    }

    /**
     * 带自定义消息的积分变化无效异常
     */
    public static ScoreException invalidChange(String customMessage) {
        return new ScoreException(ErrorCode.SCORE_CHANGE_INVALID, customMessage);
    }
} 